/**
 * 订单相关API服务
 * 集成RabbitMQ异步订单处理
 */
import apiClient from './axios'

/**
 * 订单API服务类
 */
class OrderService {
  /**
   * 创建订单（发送到RabbitMQ队列）
   * @param {Object} orderData 订单数据
   * @param {Array} orderData.goods_ids 商品ID列表
   * @param {Array} orderData.quantities 商品数量列表
   * @param {number} orderData.address_id 收货地址ID（可选）
   * @param {string} orderData.remark 订单备注
   * @returns {Promise<Object>} 订单创建结果
   */
  async createOrder(orderData) {
    try {
      console.log('🚀 创建订单请求:', orderData)
      
      const response = await apiClient.post('/orders/create', orderData)
      
      console.log('✅ 订单创建成功:', response.data)
      return response.data
    } catch (error) {
      console.error('❌ 订单创建失败:', error)
      throw this.handleError(error)
    }
  }

  /**
   * 查询订单状态
   * @param {string} orderNo 订单号
   * @returns {Promise<Object>} 订单状态信息
   */
  async getOrderStatus(orderNo) {
    try {
      console.log('🔍 查询订单状态:', orderNo)
      
      const response = await apiClient.get(`/orders/status/${orderNo}`)
      
      console.log('✅ 订单状态查询成功:', response.data)
      return response.data
    } catch (error) {
      console.error('❌ 订单状态查询失败:', error)
      throw this.handleError(error)
    }
  }

  /**
   * 测试RabbitMQ连接
   * @returns {Promise<Object>} 连接测试结果
   */
  async testConnection() {
    try {
      console.log('🔗 测试RabbitMQ连接...')
      
      const response = await apiClient.get('/orders/test-connection')
      
      console.log('✅ RabbitMQ连接测试成功:', response.data)
      return response.data
    } catch (error) {
      console.error('❌ RabbitMQ连接测试失败:', error)
      throw this.handleError(error)
    }
  }

  /**
   * 获取订单列表（现有API）
   * @returns {Promise<Array>} 订单列表
   */
  async getOrders() {
    try {
      console.log('📋 获取订单列表...')
      
      const response = await apiClient.get('/orders/')
      
      console.log('✅ 订单列表获取成功:', response.data)
      return response.data
    } catch (error) {
      console.error('❌ 订单列表获取失败:', error)
      throw this.handleError(error)
    }
  }

  /**
   * 删除订单（现有API）
   * @param {string} orderNo 订单号
   * @returns {Promise<Object>} 删除结果
   */
  async deleteOrder(orderNo) {
    try {
      console.log('🗑️ 删除订单:', orderNo)
      
      const response = await apiClient.delete(`/orders/${orderNo}`)
      
      console.log('✅ 订单删除成功:', response.data)
      return response.data
    } catch (error) {
      console.error('❌ 订单删除失败:', error)
      throw this.handleError(error)
    }
  }

  /**
   * 处理API错误
   * @param {Error} error 原始错误
   * @returns {Error} 处理后的错误
   */
  handleError(error) {
    if (error.response) {
      // 服务器响应错误
      const { status, data } = error.response
      const message = data?.detail || data?.message || `请求失败 (${status})`
      
      return new Error(message)
    } else if (error.request) {
      // 网络错误
      return new Error('网络连接失败，请检查网络')
    } else {
      // 其他错误
      return new Error(error.message || '未知错误')
    }
  }

  /**
   * 将购物车商品转换为订单格式
   * @param {Array} cartItems 购物车商品列表
   * @returns {Object} 订单数据
   */
  convertCartToOrder(cartItems) {
    const goods_ids = []
    const quantities = []
    
    cartItems.forEach(item => {
      goods_ids.push(item.id)
      quantities.push(item.qty)
    })
    
    return {
      goods_ids,
      quantities,
      remark: `购物车订单 - ${new Date().toLocaleString()}`
    }
  }

  /**
   * 计算订单总金额
   * @param {Array} cartItems 购物车商品列表
   * @returns {number} 总金额
   */
  calculateTotal(cartItems) {
    return cartItems.reduce((total, item) => {
      return total + (parseFloat(item.price) * parseInt(item.qty))
    }, 0)
  }

  /**
   * 验证订单数据
   * @param {Object} orderData 订单数据
   * @returns {Object} 验证结果
   */
  validateOrder(orderData) {
    const errors = []
    
    if (!orderData.goods_ids || orderData.goods_ids.length === 0) {
      errors.push('请选择商品')
    }
    
    if (!orderData.quantities || orderData.quantities.length === 0) {
      errors.push('请设置商品数量')
    }
    
    if (orderData.goods_ids?.length !== orderData.quantities?.length) {
      errors.push('商品和数量不匹配')
    }
    
    // 检查数量是否有效
    if (orderData.quantities?.some(qty => qty <= 0)) {
      errors.push('商品数量必须大于0')
    }
    
    return {
      isValid: errors.length === 0,
      errors
    }
  }
}

// 创建单例实例
const orderService = new OrderService()

export default orderService

// 导出具体方法供直接使用（绑定this上下文）
export const createOrder = orderService.createOrder.bind(orderService)
export const getOrderStatus = orderService.getOrderStatus.bind(orderService)
export const testConnection = orderService.testConnection.bind(orderService)
export const getOrders = orderService.getOrders.bind(orderService)
export const deleteOrder = orderService.deleteOrder.bind(orderService)
export const convertCartToOrder = orderService.convertCartToOrder.bind(orderService)
export const calculateTotal = orderService.calculateTotal.bind(orderService)
export const validateOrder = orderService.validateOrder.bind(orderService)
